package xcmg.device.dao.mapper;

import java.math.BigDecimal;
import java.util.Date;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import xcmg.device.dao.entity.sale.SaleIntentionDO;
import xcmg.device.dao.entity.sale.SaleIntentionDetailDO;
import xcmg.device.dao.entity.sale.SaleIntentionExportDO;
import xcmg.device.service.vo.sale.SaleIntentionVO;

import java.util.List;
@Mapper
public interface SaleIntentionMapper {

    List<SaleIntentionDO> list(SaleIntentionVO filter);

    int update(SaleIntentionDO record);

    SaleIntentionDO item(@Param("id")String id);

    String selectIdByNo(@Param("saleNo")String saleNo);

    int remove(String id);

    int insert(SaleIntentionDO record);

    int insertSelective(SaleIntentionDO record);

    int updateInformStatus(@Param("saleNo")String saleNo,@Param("status")String status,@Param("supplierOrgId")String supplierOrgId);

    /**
     * 修改退货状态
     * @param saleNo  String 销售单号
     * @param status Integer 退货状态（0未退货，1退货中，2退货完成）
     * @return int
     */
    int updateReturnStatus(@Param("saleNo")String saleNo,@Param("status")Integer status);

    /**
     * 修改销售意向单退货申请状态
     * @param saleNo String 销售单号
     * @param applyReturn Integer 退货状态（0未申请，1申请中，2审核通过，3审核拒绝）
     * @return int
     */
    int updateApplyReturnStatus(@Param("saleNo")String saleNo,@Param("applyReturn")Integer applyReturn);

    /**
     * 修改销售意向单出库状态
     * @param saleNo String 销售单号
     * @param outStatus Integer 退货状态（0未开始,1进行中,2已完成）
     * @return int
     */
    int updateOutStatus(@Param("saleNo")String saleNo,@Param("outStatus")Integer outStatus);

    int updateByPrimaryKey(SaleIntentionDO record);

    SaleIntentionDO itemByNo(@Param("saleNo")String saleNo, @Param("supplierOrgId")String supplierOrgId);

    SaleIntentionDO itemBySaleNo(@Param("saleNo")String saleNo);

    SaleIntentionDO itemByPurchaseNo(@Param("purchaseNo")String purchaseNo, @Param("supplierOrgId")String supplierOrgId);

    /**
     * 获取当前客户的销售意向历史收货人信息
     *
     * @param purchaseOrgId
     * @param supplierOrgId
     * @param receiverName
     * @return
     */
    List<SaleIntentionDO> listByReceiverName(@Param("purchaseOrgId")String purchaseOrgId, @Param("supplierOrgId")String supplierOrgId, @Param("receiverName")String receiverName);

    /**
     * 意向单 满足1.出库状态：未出库、出库中；2.退货状态：未退货；3.单据状态：已提交 所对应的公司ID
     *
     * @return
     */
    List<String> listOrgIds();

    /**
     * 同一公司下的意向单：1.出库状态：未出库、出库中；2.退货状态：未退货；3.单据状态：已提交；4.紧急类型单据排在前面, 再按照添加时间倒叙排
     *
     * @param supplierOrgId
     * @return
     */
    List<SaleIntentionDO> listByOrgId(@Param("supplierOrgId")String supplierOrgId);

    /**
     * 取意向单的supplierOrgId
     *
     * @param saleNo
     * @return
     */
    String selectSupplierOrgIdByNo(@Param("saleNo")String saleNo);


    /**
     * 获取指定时间内零件的出货频次（一个发货通知单算一次）
     *
     * @param materialsNo
     * @param orgId
     * @param startTime
     * @param endTime
     * @return
     */
    Integer countMaterialsOutRate(@Param("materialsNo") String materialsNo, @Param("orgId") String orgId,
        @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 修改售后状
     *
     * @param afterSaleStatus
     * @param saleNo
     * @return
     */
    Integer updateAfterSaleStatus(@Param("afterSaleStatus")Integer afterSaleStatus, @Param("saleNo")String saleNo);

    /**
     * 查询
     * @param supplierOrgId
     * @param purchaseOrgId
     * @param dealerOrgId
     * @return
     */
    Integer countSixMonthOrder(@Param("supplierOrgId") String supplierOrgId, @Param("purchaseOrgId") String purchaseOrgId, @Param("dealerOrgId") String dealerOrgId);

    List<SaleIntentionDO> findByCrmOrder(String crmOrder);

    List<SaleIntentionExportDO> findExportList(SaleIntentionVO condition);

    Integer findCountExportList(SaleIntentionVO condition);

    BigDecimal selectCashShortBySaleNo(@Param("saleNo") String saleNo);

    void updateInventoryOutStatus(@Param("saleNo") String saleNo,@Param("inventoryOutStatus") String inventoryOutStatus);
}
